/**
 * Copyright (c) 2008 Luciano Bustos - riaevolution.com, All Rights Reserved.
 * 
 * Contact luchyx@riaevolution.com
 * See www.riaevolution.com
 *  
 * Permission is hereby granted, free of charge, to any person obtaining a copy of 
 * this software and associated documentation files (the "Software"), to deal in 
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is furnished to do
 * so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all 
 * copies or substantial portions of the Software.
 * 
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE. 
 * */
 
package com.riaevolution.components
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	
	import mx.containers.TitleWindow;
	import mx.core.Application;
	import mx.events.CloseEvent;
	import mx.managers.PopUpManager;

	public class ModalPromptHandler extends TitleWindow
	{
		
		public static var _instance:ModalPromptHandler;
		
		public function ModalPromptHandler()
		{
			//TODO: implement function
			super();
		}
		public static function getInstance():ModalPromptHandler
		{
			if(!_instance) {
				_instance = new ModalPromptHandler();
			}
			return _instance;
		}
		
		public static function show(title:String = '', innerUI:DisplayObject = null,closeHandler:Function = null, modal:Boolean=true, closeButton:Boolean = true, parent:Sprite = null):ModalPromptHandler
		{
			if (!parent)
            parent = Sprite(Application.application);
            var ins:ModalPromptHandler = getInstance();
            if(innerUI) {
            	ins.addChild(innerUI);
            }
            if (closeHandler != null) {
            	ins.removeEventListener(CloseEvent.CLOSE, closeHandler);
            	ins.addEventListener(CloseEvent.CLOSE, closeHandler);	
  			}
            ins.title = title;
            ins.showCloseButton = closeButton;
            PopUpManager.addPopUp(ins,parent,modal);
            PopUpManager.centerPopUp(ins);                        
            return ins;
		}
		/**
		 * 
		 * Hide 
		 * remove the promp window from the display list.
		 * Also clear all childrens.
		 * 
		 **/
		public static function hide():void {
			if(_instance) {
				_instance.removeAllChildren();
				PopUpManager.removePopUp(_instance);				
				_instance = null;
			}
		}
		/**
		 * Return the current instance displayed by the modal window.
		 * 
		 **/
		public static function currentUI():DisplayObject {
			return _instance.getChildAt(0);
		}
		/**
		 * Replace the current displaying UI COMPONENT
		 * with the desired new component.
		 * 
		 * 
		 **/
		public static function replace(innerUI:DisplayObject):void {
			_instance.removeAllChildren();
			_instance.addChild(innerUI);
			PopUpManager.centerPopUp(_instance);
		}
	}
}